package es.usj.redes.dto;

import java.io.Serializable;
import java.util.Date;

import es.usj.redes.dao.DAOException;
import es.usj.redes.dao.DAOFactory;

public class MailEnviado implements Serializable {

	private int idMail;
	private int idUsuarioFrom;
	private String usuarioFrom;
	private String subject;
	private String texto;
	private java.util.Date fechaEnviado;
	private int idMailEnviado;
	private int idUsuarioTo;
	private boolean leido;
	private java.util.Date fechaEntregado;
	private boolean eliminado;

	public MailEnviado() {
	}

	public MailEnviado(int idMail, int idUsuarioFrom, String subject,
			String texto, Date fechaEnviado, int idMailEnviado,
			int idUsuarioTo, boolean leido, Date fechaEntregado,
			boolean eliminado) {

		this.idMail = idMail;
		this.idUsuarioFrom = idUsuarioFrom;
		this.subject = subject;
		this.texto = texto;
		this.fechaEnviado = fechaEnviado;
		this.idMailEnviado = idMailEnviado;
		this.idUsuarioTo = idUsuarioTo;
		this.leido = leido;
		this.fechaEntregado = fechaEntregado;
		this.eliminado = eliminado;
		try {
			this.usuarioFrom = DAOFactory.getInstance().getUsersDAO().read(idUsuarioFrom).getNombre();
		} catch (DAOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public int getIdMail() {
		return idMail;
	}

	public void setIdMail(int idMail) {
		this.idMail = idMail;
	}

	public int getIdUsuarioFrom() {
		return idUsuarioFrom;
	}

	public void setIdUsuarioFrom(int idUsuarioFrom) {
		this.idUsuarioFrom = idUsuarioFrom;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}

	public java.util.Date getFechaEnviado() {
		return fechaEnviado;
	}

	public void setFechaEnviado(java.util.Date fechaEnviado) {
		this.fechaEnviado = fechaEnviado;
	}

	public int getIdMailEnviado() {
		return idMailEnviado;
	}

	public void setIdMailEnviado(int idMailEnviado) {
		this.idMailEnviado = idMailEnviado;
	}

	public int getIdUsuarioTo() {
		return idUsuarioTo;
	}

	public void setIdUsuarioTo(int idUsuarioTo) {
		this.idUsuarioTo = idUsuarioTo;
	}

	public boolean isLeido() {
		return leido;
	}

	public void setLeido(boolean leido) {
		this.leido = leido;
	}

	public java.util.Date getFechaEntregado() {
		return fechaEntregado;
	}

	public void setFechaEntregado(java.util.Date fechaEntregado) {
		this.fechaEntregado = fechaEntregado;
	}

	public boolean isEliminado() {
		return eliminado;
	}

	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (eliminado ? 1231 : 1237);
		result = prime * result
				+ ((fechaEntregado == null) ? 0 : fechaEntregado.hashCode());
		result = prime * result
				+ ((fechaEnviado == null) ? 0 : fechaEnviado.hashCode());
		result = prime * result + idMail;
		result = prime * result + idMailEnviado;
		result = prime * result + idUsuarioFrom;
		result = prime * result + idUsuarioTo;
		result = prime * result + ((usuarioFrom == null) ? 0 : usuarioFrom.hashCode());
		result = prime * result + (leido ? 1231 : 1237);
		result = prime * result + ((subject == null) ? 0 : subject.hashCode());
		result = prime * result + ((texto == null) ? 0 : texto.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MailEnviado other = (MailEnviado) obj;
		if (eliminado != other.eliminado)
			return false;
		if (fechaEntregado == null) {
			if (other.fechaEntregado != null)
				return false;
		} else if (!fechaEntregado.equals(other.fechaEntregado))
			return false;
		if (fechaEnviado == null) {
			if (other.fechaEnviado != null)
				return false;
		} else if (!fechaEnviado.equals(other.fechaEnviado))
			return false;
		if (idMail != other.idMail)
			return false;
		if (idMailEnviado != other.idMailEnviado)
			return false;
		if (idUsuarioFrom != other.idUsuarioFrom)
			return false;
		if (usuarioFrom != other.usuarioFrom)
			return false;
		if (idUsuarioTo != other.idUsuarioTo)
			return false;
		if (leido != other.leido)
			return false;
		if (subject == null) {
			if (other.subject != null)
				return false;
		} else if (!subject.equals(other.subject))
			return false;
		if (texto == null) {
			if (other.texto != null)
				return false;
		} else if (!texto.equals(other.texto))
			return false;
		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "MailEnviado [idMail=" + idMail + ", idUsuarioFrom="
				+ idUsuarioFrom + ", subject=" + subject + ", texto=" + texto
				+ ", fechaEnviado=" + fechaEnviado + ", idMailEnviado="
				+ idMailEnviado + ", idUsuarioTo=" + idUsuarioTo + ", leido="
				+ leido + ", fechaEntregado=" + fechaEntregado + ", eliminado="
				+ eliminado + "]";
	}

	/**
	 * @return the usuarioFrom
	 */
	public String getUsuarioFrom() {

		try {
			this.usuarioFrom = DAOFactory.getInstance().getUsersDAO()
					.read(this.idUsuarioFrom).getNombre();
		} catch (DAOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return this.usuarioFrom;
	}

	/**
	 * @param usuarioFrom
	 *            the usuarioFrom to set
	 */
	public void setUsuarioFrom(String usuarioFrom) {
		this.usuarioFrom = usuarioFrom;
	}

	// String campos =
	// "m.idmail as idmail, m.idusuario as fromuser, m.subject, m.texto, m.fechaenviado, e.idmailusers as idenviado, e.idusuario as touser, e.leido, e.fechaentregado, e.eliminado";
}
